import {
  CategoryPromptResponse,
  DeleteImgRequest,
  GenerateRequest,
  GenerateResponse,
  GenerateResultListVO,
  GenerateResultVO,
  GetCategoryPromptRequest,
  GetGenerateResultRequest,
  GetGenerateTaskDetailRequest,
  GetGenerateTaskHistoryRequest,
  GetImageCategorysRequest,
  GetInProgressTasksRequest,
  ImageCategoryVO,
} from '@/types/ai';
import { post } from '@/utils/request';

/**
 * Ai相关API
 */
export class AiAPI {
  /**
   * 获取图片分类列表
   * @param params 请求参数
   * @returns Promise<ApiResponse<ImageCategoryVO[]>>
   */
  static async getImageCategorys(params: GetImageCategorysRequest) {
    return post<ImageCategoryVO[]>('/ai/gen_templates', params);
  }

  /**
   * 根据分类ID获取生成图片的prompt文本
   * @param params 请求参数，包含必需的category_id
   * @returns Promise<ApiResponse<CategoryPromptResponse>>
   */
  static async getCategoryPrompt(params: GetCategoryPromptRequest) {
    return post<CategoryPromptResponse>('/ai/gen_template_prompt', params);
  }

  /**
   * 触发AI生成任务
   * @param params 请求参数
   * @returns Promise<ApiResponse<GenerateResponse>>
   */
  static async generate(params: GenerateRequest) {
    return post<GenerateResponse>('/ai/generate', params);
  }

  /**
   * 获取生成结果列表
   * @param params 查询参数，所有参数都是可选的
   * @returns Promise<ApiResponse<GenerateResultVO[]>>
   */
  static async getGenerateResult(params?: GetGenerateResultRequest) {
    return post<GenerateResultVO[]>('/ai/generate_result', params);
  }

  /**
   * 查询AI生成任务结果
   * @param params 请求参数，包含task_id
   * @returns Promise<ApiResponse<GenerateTaskDetailResponse>>
   */
  static async generateTaskDetail(params: GetGenerateTaskDetailRequest) {
    return post<GenerateResultVO>('/ai/generate_task_detail', params);
  }

  /**
   * 查询AI生成历史
   * @param params 请求参数，包含gen_type、start和size
   * @returns Promise<ApiResponse<GenerateResultListVO>>
   */
  static async generateTaskHistory(params: GetGenerateTaskHistoryRequest) {
    return post<GenerateResultListVO>('/ai/generate_task_history', params);
  }

  /**
   * 删除AI生成历史图片
   * @param params 请求参数，包含img_ids数组
   * @returns Promise<ApiResponse<GenerateResultListVO>>
   */
  static async deleteGenerateImg(params: DeleteImgRequest) {
    return post<boolean>('/ai/delete_history_img', params);
  }

  /**
   * 生成产品图片
   * @param params 请求参数，包含gen_type、template_id和img
   * @returns Promise<ApiResponse<any>>
   */
  static async generateProduct(params: {
    gen_type: number;
    template_id: number;
    img: string;
    product_id: number;
  }) {
    return post<any>('/ai/generate_product', params);
  }

  /**
   * 获取产品生成结果
   * @param params 请求参数
   * @returns Promise<ApiResponse<any>>
   */
  static async generateProductResult(params?: any) {
    return post<any>('/ai/generate_product_result', params);
  }

  // 获取product模型列表
  static async genProductTemplates(params?: any) {
    return post<any>('/ai/gen_product_templates', params);
  }

  /**
   * 获取进行中的任务
   * @param params 请求参数
   * @returns Promise<ApiResponse<any>>
   */
  static async inProgressTasks(params?: any) {
    return post<any>('/ai/in_progress_tasks', params);
  }
}
